【PostgreSQL】「列"coalesce"が複数指定されました」エラーの原因と対処
概要
PostgreSQLで以下のようなSQLを実行したところ、
「列"coalesce"が複数指定されました」というエラーが発生した。
code:問題のSQL.sql
CREATE TEMP TABLE tmp_sample AS
SELECT
COALESCE(a, b),
COALESCE(c, d)
FROM tmp;
原因
COALESCE() のような関数を AS でリネームせずに複数使用すると、
PostgreSQLが自動的に関数名を列名として扱うため、
複数の列が同名「coalesce」となり重複エラーになる。
(※ CREATE TABLE AS などスキーマを生成する文脈では厳密にチェックされる)
対処法
各 COALESCE() に明示的なエイリアス(別名)を付与することで解消できる。
code:修正したSQL.sql
CREATE TEMP TABLE tmp_sample AS
SELECT
COALESCE(a, b) AS merged_value_1,
COALESCE(c, d) AS merged_value_2
FROM tmp;
これで同名列が解消され、正常にテーブルを作成できる。
備考
SELECT 単体であれば動作する場合もあるが、CREATE TABLE AS などではカラム名重複がエラーになる。
GREATEST() や LEAST() など他の関数でも同様の現象が発生する可能性がある。
#PostgreSQL